package com.bawei.lib_net.interceptor

import com.bawei.lib_net.common.ConstantValue
import com.bawei.lib_net.msgbus.LiveDataBus
import com.bawei.lib_storage.mmkv.AuthMMKV
import okhttp3.Interceptor
import okhttp3.Response

/**
 * @author jihaosen
 * @description
 * @date 2024/10/24
 */
class TokenInterceptor: Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val request = chain.request()
        var response: Response? = null
        if (AuthMMKV.hasLogin()) {
            val newRequest = request.newBuilder().addHeader("token", AuthMMKV.token).build()
            response = chain.proceed(newRequest)
        } else {
            response = chain.proceed(request)
        }
        //token失效问题

        when (response?.code) {
            /*
            * 利用LiveDataBus 发送网络状态
            * */
            500 -> LiveDataBus.with<Int>(ConstantValue.NET_STATE).postValue(500)
            404 -> LiveDataBus.with<Int>(ConstantValue.NET_STATE).postValue(404)
            //token失效怎么办？
            //方案一：手动刷新token：发送事件总线401，监听事件跳转到登陆页面，重新获得token
            401 -> {
                // 处理标准HTTP 401状态码
                LiveDataBus.with<Int>(ConstantValue.NET_STATE).postValue(401)
            }
            40103 -> {
                // 处理自定义40103状态码
                LiveDataBus.with<Int>(ConstantValue.NET_STATE).postValue(40103)
            }
            //方案二：自动刷新token
//            1.客户端发起登陆请求，服务器返回access_token和refresh_token，access_token有效期2个小时，refresh_token有效期15天
//            2.网络请求数据携带access_token，服务器判断access_token若过期，就返回401错误码给客户端，客户端通过一个特定的api接口，传入refresh_token参数获得新的access_token和refresh_token，本地并更新
//            3.如果连续15天未使用app或者用户修改了密码，则表示refresh_token过期了，则跳转到登陆页面，重新获得新的access_token和refresh_token,本地并更新
//
        }
        return response!!
    }

}